package fr.miage.shopping.dao.traitements;

import fr.miage.shopping.metier.entite.Admin;
import fr.miage.shopping.metier.entite.Categorie;
import fr.miage.shopping.metier.entite.Client;
import fr.miage.shopping.metier.entite.Commande;
import fr.miage.shopping.metier.entite.Lignecommande;
import fr.miage.shopping.metier.entite.Produit;
import fr.miage.shopping.metier.entite.Role;
import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;


/**
 * @author kristela
 *
 */
public class CommandeDao {

	/**
	 * Retourne une session.
	 * 
	 * @return la session.
	 */
	public static Session getSession() {
		Configuration config = new Configuration();
		config.addClass(Client.class);
		config.addClass(Commande.class);
		config.addClass(Lignecommande.class);
		config.addClass(Produit.class);
		config.addClass(Admin.class);
		config.addClass(Categorie.class);
		config.addClass(Role.class);
		SessionFactory sessionFactory = config.buildSessionFactory();
		Session session = sessionFactory.openSession();
		return session;
	}

	/**
	 * Ajoute un nouveau commande dans la base de donnees.
	 * 
	 * @param commande
	 *            le admin a ajouter.
	 */
	public static void insertCommande(Commande commande) {
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		Transaction tx = null;
		try {
			tx = session.beginTransaction();
			session.saveOrUpdate(commande);
			tx.commit();
            System.out.println("tutu"+commande.getIdCommande());
		} catch (Exception e) {
			if (tx != null) {
				tx.rollback();
			}
			e.printStackTrace();
		} finally {
			session.close();
		}

		session.getSessionFactory().close();
	}

	/**
     * Sélectionne une commande
     * @param commande la commande
     * @return la commande
     */
	public static Commande selectCommande(Commande commande) {
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		Commande cLoad = new Commande();  
		session.load(cLoad, commande.getIdCommande());
		session.close();
		session.getSessionFactory().close();
		return cLoad;
	}

	/**
	 * Renvoie la liste de touts les admins.
	 * 
	 * @return tous les admins.
	 */
	public static List<Commande> selectAllCommande() {
		List<Commande> listCommande = new ArrayList<Commande>();
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		listCommande = (List<Commande>) session.createQuery("Select c from Commande c").list();
		ArrayList<Commande> lCommande=new ArrayList<Commande>();
		for (int i = 0; i < listCommande.size(); i++) {
			Commande commande=listCommande.get(i);
			lCommande.add(commande);
		}
		session.close();
		session.getSessionFactory().close();
		return lCommande;
	}

	/**
	 * Effacer le compte epargne correspondant a un numero.
	 * 
	 * @param numero
	 *            le numero du compte.
	 */
	public static void deleteCommande(Commande commande) {
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		} else {
			session.delete(commande);
		}
	}

	public static void updateCommande(Commande commande) {
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		} else {
			session.update(commande);
		}
	}

	/**
	 * Renvoi les commandes d'un client
	 * @param commande
	 * @return
	 */
	public static List<Commande> getCommandeByClient(Client client){
		Session session = getSession();
		if (session == null) {
			System.out.println("Pas de connexion!");
			System.exit(0);
		}
		String hsql="Select co FROM Commande co WHERE idClient="+client.getIdClient()+"";
		List<Commande>listCommande=(List<Commande>)session.createQuery(hsql).list();
		ArrayList<Commande> lCommande=new ArrayList<Commande>();
		for (int i = 0; i < listCommande.size(); i++) {
			Commande commande=listCommande.get(i);
			lCommande.add(commande);
		}
		// listAdmin =session.createSQLQuery("SELECT * FROM Commande;").list();
		session.close();
		session.getSessionFactory().close();
		return lCommande;
	}
	
	public static String getCommandeCritere(Commande commande){
        return null;
	}

}
